package com.model;

import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

import com.common.BaseModel;
import com.type.TipoDepositoEnum;

@SuppressWarnings("serial")
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Deposito extends BaseModel {

	@Id
	@SequenceGenerator(name = "id", sequenceName = "DepositoSEQ")
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
	@Column(unique = true)
	private Long id;

	@Column(length = 200, unique = true, nullable = false)
	private String nombre;

	@Enumerated(EnumType.STRING)
	private TipoDepositoEnum tipoDeposito;

	@OneToOne(fetch = FetchType.EAGER, optional = true)
	private Cliente cliente;

	@Basic
	private Boolean favorito;

	@OneToMany(orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "depositoID")
	private List<SeccionProducto> listaSeccionProducto;

	public Deposito(Long id, String nombre, TipoDepositoEnum tipoDeposito,
			Cliente cliente, Boolean favorito,
			List<SeccionProducto> listaSeccionProducto) {
		super();
		this.id = id;
		this.nombre = nombre;
		this.tipoDeposito = tipoDeposito;
		this.cliente = cliente;
		this.favorito = favorito;
		this.listaSeccionProducto = listaSeccionProducto;
	}

	public Deposito() {
		this(null, null, null, null, Boolean.FALSE, null);
	}

	@Override
	public Long getID() {
		return id;
	}

	@Override
	public void setID(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public TipoDepositoEnum getTipoDeposito() {
		return tipoDeposito;
	}

	public void setTipoDeposito(TipoDepositoEnum tipoDeposito) {
		this.tipoDeposito = tipoDeposito;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Boolean getFavorito() {
		return favorito;
	}

	public void setFavorito(Boolean favorito) {
		this.favorito = favorito;
	}

	public List<SeccionProducto> getListaSeccionProducto() {
		return listaSeccionProducto;
	}

	public void setListaSeccionProducto(
			List<SeccionProducto> listaSeccionProducto) {
		this.listaSeccionProducto = listaSeccionProducto;
	}

}
